const momentService = require("../service/moment.service")
const { create } = require("../service/moment.service")
class MonmentController {
  // 新增动态
  async create(ctx, next) {
    // 1. 获取动态内容
    const { content } = ctx.request.body

    // 2. 动态由谁（id）发布的，ctx.user 中由信息
    console.log(ctx.user)
    const { id } = ctx.user

    // 3. 将数据保存到数据库中
    const res = await create(id, content)

    ctx.body = {
      code: 0,
      message: "用户发表动态成功",
      data: res,
    }
  }

  // 获取动态列表
  async list(ctx, next) {
    // 获取分页查询的数据
    const { limit, offset } = ctx.query

    // 从数据库中查询动态列表
    const res = await momentService.queryList(limit, offset)

    // 返回数据
    ctx.body = {
      code: 0,
      data: res,
    }
  }

  // 获取动态详情
  async detail(ctx, next) {
    //  1. 获取动态 id
    const { momentId } = ctx.params

    // 2. 根据 id来查询动态详情
    const res = await momentService.queryById(momentId)

    // 返回数据
    ctx.body = {
      code: 0,
      data: res,
    }
  }

  // 修改动态
  async update(ctx, next) {
    // 1. 获取动态的id
    const { momentId } = ctx.params
    // 2. 获取要修改的内容
    const { content } = ctx.request.body
    // 3. 数据库中执行修改语句
    const res = await momentService.update(momentId, content)

    // 返回数据
    ctx.body = {
      code: 0,
      message: "修改动态成功",
      data: res,
    }
  }

  // 删除动态
  async remove(ctx, next) {
    // 1. 获取动态的id
    const { momentId } = ctx.params
    // 2. 数据库中执行删除语句
    const res = await momentService.remove(momentId)

    // 返回数据
    ctx.body = {
      code: 0,
      message: "删除动态成功",
      data: res,
    }
  }

  // 为 moment 添加 label
  async addLabels(ctx, next) {
    // 1.获取一些参数
    const { labels } = ctx
    const { momentId } = ctx.params
    // console.log(labels, momentId)
    // console.log(momentId)
    // 2.将 moment_id和 label_id添加 moment_label关系表
    try {
      for (const label of labels) {
        // 2.1.判断 label_id和 moment_id 的关系是否已经存在
        const isExists = await momentService.hasLabel(momentId, label.id)
        if (!isExists) {
          // 2.2.如果不存在该moment_id和label_id的关系数据
          const result = await momentService.addLabel(momentId, label.id)
        }
      }

      ctx.body = {
        code: 0,
        message: "为动态添加标签成功~",
      }
    } catch (error) {
      console.log(error)
      ctx.body = {
        code: -3001,
        message: "为动态添加标签失败, 请检测数据有问题~",
      }
    }
  }
}

module.exports = new MonmentController()
